package Date.TimeDay08;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.*;

import org.junit.Test;

/**
 * 	演示LocalDate(日期): 2020-08-11
 * 	
 * @author Administrator
 *
 */
public class LocalDateDemo {

	/**
	 * 	获取LocalDate
	 */
	@Test
	public void demo() {
	
		// 在jdk1.8中所有的时间等是不能通过new获取的
//		LocalDate localDate = new LocalDate();
		
		// now
		LocalDate localDate = LocalDate.now();
		System.out.println(localDate);
		
		// of
		LocalDate localDate2 = LocalDate.of(2020, 8, 11);
		System.out.println(localDate2);
		
		// parse:字符串转化
		// formatter
//		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // pattern:格式
		LocalDate localDate3 = LocalDate.parse("2020-08-11", DateTimeFormatter.ofPattern("yyyy-MM-dd")); //由字符串转化得来
		System.out.println(localDate3);	
	}
	
	/**
	 * 	get类方法
	 * 	注意事项：日期不能获取时分秒等字段的数据
	 */
	@Test
	public void demo2() {
		LocalDate localDate = LocalDate.now();
		
		// 以字段的形式进行获取
		int year = localDate.get(ChronoField.YEAR);
		System.out.println("获取到的年是：" + year);
		
//		int second = localDate.get(ChronoField.INSTANT_SECONDS); // INSTANT_SECONDS：秒  错误的
	}
	
	/**
	 * 	演示计算
	 */
	@Test
	public void demo3() {
		LocalDate localDate = LocalDate.now();
		System.out.println(localDate);

		//  依据单位进行调整
		LocalDate localDate2 = localDate.plus(5, ChronoUnit.DAYS);  //amountToAdd：增量  unit：单位

		System.out.println(localDate2);

		
		LocalDate localDate3 = localDate.minus(12, ChronoUnit.DAYS); //  amountToSubtract:增量  unit:单位
		System.out.println(localDate3);
		
	}

	/**
	 * 	两个日期的间隔
	 */
	@Test
	public void demo4() {
		
		LocalDate now = LocalDate.now();
		LocalDate come = LocalDate.of(2020, 7, 22);
		
		long days = come.until(now, ChronoUnit.DAYS);
		System.out.println("在杭州待了" + days + "天");
	}

	/**
	 * 	演示with
	 */
	@Test
	public void demo5() {
		LocalDate localDate = LocalDate.now();
		
		// 直接调整字段
		LocalDate localDate2 = localDate.with(ChronoField.MONTH_OF_YEAR, 5); // field：字段 	newValue：值
		System.out.println(localDate2);
		
		// 提供了一种快捷调整日期的工具
		LocalDate localDate3 = localDate.with(TemporalAdjusters.firstDayOfMonth());

		System.out.println(localDate3);
		
	}
	
	/**
	 * 	日期的比较
	 */
	@Test
	public void demo6() {
		LocalDate localDate = LocalDate.now();
		LocalDate localDate2 = LocalDate.of(2021, 8, 11);
		
		// 判断两个日期是否相等
		localDate.equals(localDate2); 
		
		// 判断之前
		localDate.isBefore(localDate2);
		
		// 判断之后
		localDate.isAfter(localDate2);
		
		// 比较
		localDate.compareTo(localDate2);
	}
	
	/**
	 * 	格式化
	 */
	@Test
	public void demo7() {
		// 格式化
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
		LocalDate localDate = LocalDate.now();
		String dateString = dateTimeFormatter.format(localDate);
		System.out.println(dateString);
		String dateString1 = localDate.format(dateTimeFormatter);
		System.out.println(dateString1);
		
		// 解析
		String s = "2021年06月15日";
		TemporalAccessor parse = dateTimeFormatter.parse(s);
		System.out.println(parse);
//		LocalDate parse1 = (LocalDate)dateTimeFormatter.parse(s); 错误
//		System.out.println(parse1);
	}
}
